package com.summerbird.mallchat.common.user.service;

import com.summerbird.mallchat.common.common.domain.vo.req.CursorPageBaseReq;
import com.summerbird.mallchat.common.common.domain.vo.req.PageBaseReq;
import com.summerbird.mallchat.common.common.domain.vo.resp.CursorPageBaseResp;
import com.summerbird.mallchat.common.common.domain.vo.resp.PageBaseResp;
import com.summerbird.mallchat.common.user.domain.vo.req.friend.FriendApplyReq;
import com.summerbird.mallchat.common.user.domain.vo.req.friend.FriendApproveReq;
import com.summerbird.mallchat.common.user.domain.vo.req.friend.FriendCheckReq;
import com.summerbird.mallchat.common.user.domain.vo.resp.friend.FriendApplyResp;
import com.summerbird.mallchat.common.user.domain.vo.resp.friend.FriendCheckResp;
import com.summerbird.mallchat.common.user.domain.vo.resp.friend.FriendResp;
import com.summerbird.mallchat.common.user.domain.vo.resp.friend.FriendUnreadResp;

/**
 * <p>
 * 好友服务
 * </p>
 *
 * @author <a href="https://github.com/zongzibinbin">abin</a>
 * @since 2024-01-08
 */
public interface FriendService {

    /**
     * 好友列表
     * @param uid
     * @param request
     * @return
     */
    CursorPageBaseResp<FriendResp> friendList(Long uid, CursorPageBaseReq request);

    /**
     * 判断是否是自己的好友
     * @param uid
     * @param request
     * @return
     */
    FriendCheckResp check(Long uid, FriendCheckReq request);

    /**
     * 申请好友
     * @param uid
     * @param request
     */
    void apply(Long uid, FriendApplyReq request);

    /**
     * 同意好友申请
     * @param uid
     * @param request
     */
    void applyApprove(Long uid, FriendApproveReq request);

    /**
     * 好友申请列表
     * @param uid
     * @param request
     * @return
     */
    PageBaseResp<FriendApplyResp> pageApplyFriend(Long uid, PageBaseReq request);

    /**
     * 删除好友
     * @param uid
     * @param friendUid
     */
    void deleteFriend(Long uid, Long friendUid);

    /**
     * 申请未读数
     * @param targetId
     * @return
     */
    FriendUnreadResp unread(Long targetId);
}
